package com.nurt.dao.impl;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import com.nurt.dao.OrderDao;
import com.nurt.entity.OrderEntity;
import com.nurt.utils.DatabaseManager;


// 步骤3.1：创建订单接口的实体类。

public class OrderDaoImpl implements OrderDao{

    // 步骤3.2：创建数据库连接。
    // private Connection conn;

    // 步骤3.3：创建构造函数，获取数据库连接。
    // public OrderDaoImpl() {
    //     try {
    //         this.conn = DatabaseManager.getInstance().getConnection();
    //     } catch (SQLException ex) {
    //         ex.printStackTrace();
    //     }
    // }
    
    // 步骤3.4：实现订单接口的方法。
    public List<OrderEntity> selectOrders(int userId) throws SQLException {
        // 步骤3.4.1：创建 SQL 语句。
        // String sql = "SELECT * FROM orders WHERE userId = " + userId;
        // 步骤3.4.2：创建 Statement 对象。
        // conn 对象是用来连接数据库的。
        // conn 对象实例在本类的构造函数中创建。
        // statment 对象是用来执行 SQL 语句的。
        // Statement stmt = conn.createStatement();
        // 步骤3.4.3：执行 SQL 语句。
        // ResultSet 对象是用来存储查询结果的。
        // executeQuery() 方法用来执行查询语句。
        // ResultSet rs = stmt.executeQuery(sql);
        // 步骤3.4.4：创建订单列表。
        // List<OrderEntity> orders = new ArrayList<>();
        // 步骤3.4.5：遍历结果集。
        // resultSet 对象的 next() 方法用来遍历结果集。
        // while (rs.next()) {
            // resultSet 对象的 getXXX() 方法用来获取字段值。
        //     OrderEntity order = new OrderEntity();
        //     order.setOrderId(rs.getInt("orderId"));
        //     order.setUserId(rs.getInt("userId"));
        //     order.setStatus(rs.getInt("status"));
        //     orders.add(order);
        // }
        // 步骤3.4.6：返回订单列表。
        // return orders;
        return null;
    }

    // 步骤3.5：实现订单接口的方法。
    public OrderEntity selectOrder(int userId) throws SQLException {
        // 步骤3.5.1：创建 SQL 语句。
        // String sql = ?;
        // 步骤3.5.2：创建 Statement 对象。
        // Statement stmt = ?;
        // 步骤3.5.3：执行 SQL 语句。
        // ResultSet rs = ?;
        // 步骤3.5.4：判断是否有结果/遍历结果集。
        // if (rs.next()) {
            // 步骤3.5.5：创建订单对象。
            // OrderEntity order = ?;
            // 步骤3.5.6：设置订单对象的属性。
            // order.setOrderId(?);
            // order.setUserId(?);
            // order.setStatus(?);
        //     return order;
        // } else {
            return null;
        // }
    }

    // 步骤3.6：实现订单接口的方法。
    public OrderEntity selectOrderByStatus(int userId, int status) throws SQLException {
        // 步骤3.6.1：创建 SQL 语句。
        String sql = ?;
        // 步骤3.6.2：创建 Statement 对象。
        Statement stmt = ?;
        // 步骤3.6.3：执行 SQL 语句。
        ResultSet rs = ?;
        // 步骤3.6.4：判断是否有结果/遍历结果集。
        // if (?) {
            // 步骤3.5.5：创建订单对象。
            // OrderEntity order = ?;
            // 步骤3.5.6：设置订单对象的属性。
            // order.setOrderId(?);
            // order.setUserId(?);
            // order.setStatus(?);
        //     return order;
        // } else {
            return null;
        // }
    }

    // 步骤3.7：实现订单接口的方法。
    public int updateOrder(OrderEntity order) throws SQLException {
        // String sql = "UPDATE orders SET userId = " + order.getUserId() + ", status = " + order.getStatus() + " WHERE orderId = " + order.getOrderId();
        // Statement stmt = conn.createStatement();
        // return stmt.executeUpdate(sql);
        return 0;
    }

    public int updateOrderStatus(int orderId, int status) throws SQLException {
        // String sql = "UPDATE orders SET status = " + status + " WHERE orderId = " + orderId;
        // Statement stmt = conn.createStatement();
        // return stmt.executeUpdate(sql);
        return 0;
    }

    // 步骤3.8：实现订单接口的方法。
    public int insertOrder(OrderEntity order) throws SQLException {
        // 步骤3.8.1：创建 SQL 语句。
        // String sql = "INSERT INTO orders (userId, status) VALUES (" + order.getUserId() + ", " + order.getStatus() + ")";
        // Statement stmt = conn.createStatement();
        // stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
        // 步骤3.8.2：获取自动生成的主键。
        // getGeneratedKeys() 方法用来获取自动生成的主键。
        // ResultSet rs = stmt.getGeneratedKeys();
        // if (rs.next()) {
            // 步骤3.8.3：返回自动生成的主键。
            // getInt(1) 方法用来获取第一个字段的值。
        //     return rs.getInt(1);
        // } else {
        //     throw new SQLException("Creating order failed, no ID obtained.");
        // }
        return 0;
    }
}